Day 15 用教練的配速表判過達成率—四區是 1:36/400m,跑進 1:34.0–1:38.0 就算達標。
那張表是教練提供,但如果沒有表呢?能不能從一場成績反推出訓練配速?
今天想做這個嘗試,而做完發現,這種計算機最容易誤會的地方不是公式,是它與實際的差距。

跑步圈算等效成績有兩套主流方法,出發點完全不同。
Riegel(1977) 是一條冪次律:
T₂ = T₁ × (D₂ / D₁)^1.06
Pete Riegel 是一位工程師,他統計了大量比賽成績,發現距離加倍時完賽時間大約變成 2^1.06 倍,這是從資料歸納出來的。
那個 1.06 就是全部的祕密,適用範圍是 3.5 到 230 分鐘。
Daniels-Gilbert VDOT(1979) 走另一條路—從生理模型出發:
VO₂ = −4.60 + 0.182258·v + 0.000104·v² (v = 公尺/分)
%VO₂max = 0.8 + 0.1894393·e^(−0.012778·t)
+ 0.2989558·e^(−0.1932605·t) (t = 分鐘)
第一條算「跑這個速度要耗多少氧」,第二條算「這個時長能維持最大攝氧的百分之幾」,兩個一除,得到 VDOT。
Jack Daniels 是運動生理學家,這兩條式子來自實驗室的跑步機測試。
Riegel 一行:
export const riegel = (t1: number, d1: number, d2: number) =>
t1 * Math.pow(d2 / d1, RIEGEL_EXP);
VDOT 要多幾行,而且反推沒有解析解—給定 VDOT 求成績只能逼近:
/** 由 VDOT 反推某距離的成績。沒有解析解,用二分逼近。 */
export function timeFromVdot(v: number, d: number): number {
let lo = 60, hi = 6 * 3600;
for (let i = 0; i < 60; i++) {
const mid = (lo + hi) / 2;
// 時間越長 VDOT 越低,所以算出來比目標高就要往「更慢」找
if (vdot(mid, d) > v) lo = mid; else hi = mid;
}
return (lo + hi) / 2;
}
六十次二分,精度到毫秒以下。
這是我做完最想知道的,用一個 VDOT 47.3 的人(東京馬 3:22:07)去換算,十二組配對:
| 來源 → 目標 | VDOT | Riegel | 差 |
|---|---|---|---|
| 半馬 → 5K | 20:55 | 20:53 | +2s |
| 全馬 → 10K | 43:52 | 43:56 | −5s |
| 10K → 5K | 20:55 | 20:48 | +7s |
| 5K → 半馬 | 1:36:05 | 1:36:13 | −8s |
| 半馬 → 10K | 43:22 | 43:33 | −11s |
| 全馬 → 半馬 | 1:37:11 | 1:36:56 | +15s |
| 10K → 全馬 | 3:19:54 | 3:19:30 | +24s |
| 半馬 → 全馬 | 3:19:54 | 3:20:20 | −26s |
| 5K → 全馬 | 3:19:54 | 3:20:37 | −43s |
最大差 43 秒,佔一場 3 小時 20 分的 0.36%。
而且規律很清楚:跨越的距離差越大,分歧越大。 相鄰距離之間都在 15 秒內,5K → 全馬 跨了八倍才差 43 秒。
差 43 秒的話,選一個不就好了?
但從實驗精神出發,我們兩個公式都加入計算作為參考,
所以計算機把兩欄並排,差超過一分鐘標黃:
| 距離 | VDOT | Riegel | 差 |
順手把六場全馬都算了一次:
| 賽事 | 完賽 | VDOT |
|---|---|---|
| 東京馬 | 3:22:07 | 47.3 |
| 臺北馬 24 | 3:28:41 | 45.4 |
| 臺北馬 25 | 3:30:40 | 44.7 |
| 國道馬 | 3:34:39 | 43.6 |
| 福岡馬 | 3:37:24 | 43.3 |
| 台東 CT | 3:56:54 | 38.3 |
最好和最差差了 9 個 VDOT。
而 Day 22 已經知道台東那場的問題不是體能—那天氣溫 24.4 度,同樣的配速前半心率就比福岡高 15 下。
所以「用單場成績算 VDOT」有個沒寫在公式裡的前提:那場要正常 ,拿台東那場去推訓練配速,會得到一組太慢的數字。
12/20 是這個系列從第一天就在講的目標賽事,計算機算得出來一個數字,但這邊沒有把它放上去。
Day 19 才剛寫了一條規則,禁止 AI 助教做成績預測
而且理由是同一個:
這裡算的是「等效」不是「預測」。
等效講的是「同樣的體能換算到別的距離會是多少」;預測講的是「那天你會跑多少」。
後者要考慮天氣、狀態、賽道 — 這個計算機一個都不知道,
而六場全馬裡光是氣溫就從 12.2° 到 24.4°。
計算機吐出五個訓練區間(E/M/T/I/R,Daniels 的分法),而跑班用的是六區的 1A / 1B 表。
兩套不一樣,而且不能互換。
這是 Daniels 的五區,跟跑班的 1A / 1B 六區不是同一套。
跑班那兩張表是教練給的,這裡是從成績反推的 — 兩者可以對照,但不能互換。
這句也印在畫面上提醒,因為一個計算機給你一組配速,很容易就被當成「該練的配速」—而該練什麼應該和教練討論來決定,而不是公式。
工具做好了,明天要拿它去和 Garmin 對答案!